package service

import (
	"asuOfficialApi/comm"
	"asuOfficialApi/dao"
	"asuOfficialApi/db"
	"asuOfficialApi/model"
)

type TokenService interface {
	Insert(userId int64, userType int) *model.Token
	GetToken(token string) *model.Token
	GetTokenById(userId int64) *model.Token
	DeleteToken(token string) *comm.Err
}

type tokenService struct {
	dao *dao.TokenDao
}

func NewTokenService() TokenService {
	return &tokenService{
		dao: dao.NewTokenDao(db.DB),
	}
}

func (s *tokenService) Insert(userId int64, userType int) *model.Token {
	uuid, _ := comm.NewUUID()
	if tokenModel, err := s.dao.InsertToken(comm.CreateSign(uuid), userId, userType); err != nil {
		return nil
	} else {
		return tokenModel
	}
}

func (s *tokenService) GetToken(token string) *model.Token {
	if tokenModel, err := s.dao.FindByToken(token); err != nil {
		return nil
	} else {
		return tokenModel
	}
}

func (s *tokenService) GetTokenById(userId int64) *model.Token {
	if tokenModel, err := s.dao.FindByUserId(userId); err != nil {
		return nil
	} else {
		return tokenModel
	}
}

func (s *tokenService) DeleteToken(token string) *comm.Err {
	err := s.dao.DeleteToken(token)
	if err != nil {
		return comm.NewError(comm.ErrorTokenDel, "token删除失败")
	} else {
		return nil
	}
}
